package modelo.datos;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import com.sun.jersey.server.linking.Ref;
import com.sun.jersey.server.linking.Ref.Style;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Empresa {
	private String nombre;
	private String nif;
	private String direccion;
	@Ref(style=Style.ABSOLUTE, value="empresas/{nif}")
	private URI self;
	@Ref(style=Style.ABSOLUTE, value="empresas/")
	private URI parent;
	private List<Factura> facturas =new ArrayList<Factura>();


	public Empresa() {
		super();
	}

	public Empresa(String nombre, String nif,String direccion) {
		super();
		this.nombre = nombre;
		this.nif = nif;
		this.direccion=direccion;

	}
	
	public void nuevaFactura(Factura factura){
	    facturas.add(factura);
	}

	public String getNif() {
		return nif;
	}
	public void actualiza(Empresa empresa) {
		this.nombre = empresa.nombre;
		this.nif = empresa.nif;
		this.direccion=empresa.direccion;
	}

	@Override
	public int hashCode() {
	    final int prime = 31;
	    int result = 1;
	    result = prime * result
		    + ((direccion == null) ? 0 : direccion.hashCode());
	    result = prime * result + ((nif == null) ? 0 : nif.hashCode());
	    result = prime * result
		    + ((nombre == null) ? 0 : nombre.hashCode());
	    return result;
	}

	@Override
	public boolean equals(Object obj) {
	    if (this == obj)
		return true;
	    if (obj == null)
		return false;
	    if (getClass() != obj.getClass())
		return false;
	    Empresa other = (Empresa) obj;
	    if (direccion == null) {
		if (other.direccion != null)
		    return false;
	    } else if (!direccion.equals(other.direccion))
		return false;
	    if (nif == null) {
		if (other.nif != null)
		    return false;
	    } else if (!nif.equals(other.nif))
		return false;
	    if (nombre == null) {
		if (other.nombre != null)
		    return false;
	    } else if (!nombre.equals(other.nombre))
		return false;
	    return true;
	}


}